package dao

import (
	"time"
)

// 这是 Address 的全局公开dao对象，被service层调用!
var AddressDao = addressDao{}

// 收货地址表
// 这是 address表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Address struct {
	Id            int32     `json:"id" form:"id" v:"id" db:"id"`
	Name          string    `json:"name" form:"name" v:"name" db:"name"`                                         // 收货人名称
	UserId        int32     `json:"user_id" form:"user_id" v:"user_id" db:"user_id"`                             // 用户表的用户ID
	Province      string    `json:"province" form:"province" v:"province" db:"province"`                         // 行政区域表的省ID
	City          string    `json:"city" form:"city" v:"city" db:"city"`                                         // 行政区域表的市ID
	County        string    `json:"county" form:"county" v:"county" db:"county"`                                 // 行政区域表的区县ID
	AddressDetail string    `json:"address_detail" form:"address_detail" v:"address_detail" db:"address_detail"` // 详细收货地址
	AreaCode      string    `json:"area_code" form:"area_code" v:"area_code" db:"area_code"`                     // 地区编码
	PostalCode    string    `json:"postal_code" form:"postal_code" v:"postal_code" db:"postal_code"`             // 邮政编码
	Tel           string    `json:"tel" form:"tel" v:"tel" db:"tel"`                                             // 手机号码
	IsDefault     int8      `json:"is_default" form:"is_default" v:"is_default" db:"is_default"`                 // 是否默认地址
	AddTime       time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`                         // 创建时间
	UpdateTime    time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"`             // 更新时间
	Deleted       int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`                // 逻辑删除

}

// 注意:这是 Address 的私有dao对象，只能在dao层内使用!
type addressDao struct {
	InsertTemplate func(arg Address) (int64, error)  //插入一条记录
	UpdateTemplate func(arg Address) (int64, error)  //更新一条记录
	DeleteTemplate func(id int64) (int64, error)     `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Address, error)   `args:"id"` //根据传入的主键获取一条记录
	List           func(arg Page) ([]Address, error) //模糊分页查询
}

/*
// 这是 address 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type AddressPostman struct {
id
name
user_id
province
city
county
address_detail
area_code
postal_code
tel
is_default
add_time
update_time
deleted

}*/

// 这是 address 表的批量请求参数
type AddressReq struct {
	List []Address `json:"list" form:"list"`
}

// 这是 addressDao.List()方法的请求参数
type AddressList struct {
	Page
}
